#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <semaphore.h>


// 定义多个线程共享的数据缓冲区
char message[100];

// 写线程：向共享缓冲区写入一个字符串
void *writer(void *argv)
{
    strcpy(message, "atguigu");
    printf("writer线程写入数据: atguigu \n");

    return NULL;
}

// 读线程：从共享缓冲区读取数据显示，并重置缓冲区
void *reader(void *argv)
{

    // 读取缓冲区数据显示
    printf("reader线程读取数据: %s\n", message);
    // 重置缓冲区
    memset(message, 0, 100);

    return NULL;
}

int main()
{

    // 定义2个线程标识符
    pthread_t thread_read, thread_write;

    // 创建读和写的2个线程
    pthread_create(&thread_read, NULL, reader, NULL);
    pthread_create(&thread_write, NULL, writer, NULL);

    // 等待2个线程结束
    pthread_join(thread_write, NULL);
    pthread_join(thread_read, NULL);

    return 0;
}

/*
当前问题：无法保证读线程先于写线程执行？

如果通过在写线程中sleep虽然能达到目标，但睡眠的时间不好控制（不精准）
*/